HAL LTDC initialization and configuration functions migration

The goal of this page is to show how to migrate the initialization sequence using STM32CubeMX2:

  • Open STM32CubeMX2 LTDC configuration panel.

  • Configure the SW layer HAL.

  • Configure the LTDC main features.

  • Configure the LTDC advanced features.

  • Configure the LTDC layers.

  • Configure the LTDC GPIO pins.

  • Configure the NVIC if the application requires the LTDC to be used in IT mode.

  • Generate the code.

HAL LTDC configuration panel

Create a new project with the STM32CubeMX2, then start the initialization and the main configuration.

Project configuration panel

HAL LTDC main features configuration

Configure the LTDC main features.

LTDC main feature configuration

HAL LTDC advanced features configuration

Configure the advanced LTDC features.

LTDC advanced feature configuration

HAL LTDC layers configuration

Configure the LTDC layers.

LTDC layers configuration

GPIO configuration

Configure GPIO pins.

LTDC GPIO configuration

NVIC configuration

Configure the NVIC in case of an interrupt.

LTDC NVIC configuration

Generated LTDC initialization and de-initialization sequences

The LTDC initialization sequence is generated in the mx_ltdc_init function in the mx_ltdc.c file under $YOUR_PROJECT_NAME$/$YOUR_PROJECT_NAME$_SW/generated/STM32Cube_CodeGen.

Related concepts:

Note

In HAL1, MX_LTDC_Init() configures the LTDC peripheral and layers, while HAL_LTDC_MspInit() handles RCC and GPIO setup. In HAL2, mx_ltdc_init() combines the LTDC peripheral, RCC and GPIO configuration, with layer configuration moved to mx_ltdc_config_layer().

STM32CubeMX2 Generated : LTDC initialization and De-initialization sequence

Topic

HAL1 Code Snippet

HAL2 Code Snippet

Handle declaration

LTDC_HandleTypeDef hltdc;
static hal_ltdc_handle_t hLTDC;

Initialization and configuration sequence

static void MX_LTDC_Init(void)
{
   LTDC_LayerCfgTypeDef pLayerCfg = {0};
   LTDC_LayerCfgTypeDef pLayerCfg1 = {0};











   /* LTDC Screen Configuration */
   hltdc.Instance = LTDC;
   hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
   hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
   hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
   hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
   hltdc.Init.HorizontalSync     = 0x1;
   hltdc.Init.VerticalSync       = 0x1;
   hltdc.Init.AccumulatedHBP     = 0x0000;
   hltdc.Init.AccumulatedVBP     = 0x0000;
   hltdc.Init.AccumulatedActiveW = 0x0000;
   hltdc.Init.AccumulatedActiveH = 0x0000;
   hltdc.Init.TotalWidth         = 0x0000;
   hltdc.Init.TotalHeigh         = 0x0000;
   hltdc.Init.Backcolor.Blue     = 0x00;
   hltdc.Init.Backcolor.Green    = 0x00;
   hltdc.Init.Backcolor.Red      = 0x00;
   if (HAL_LTDC_Init(&hltdc) != HAL_OK)
   {
     Error_Handler();
   }

   /* LTDC layer configuration */
   pLayerCfg.WindowX0 = 0;
   pLayerCfg.WindowX1 = 320;
   pLayerCfg.WindowY0 = 0;
   pLayerCfg.WindowY1 = 240;
   pLayerCfg.PixelFormat     = LTDC_PIXEL_FORMAT_L8;
   pLayerCfg.Alpha           = 255;
   pLayerCfg.Alpha0          = 0;
   pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
   pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
   pLayerCfg.FBStartAdress   = 0; /* The frame buffer address is handled by the user */
   pLayerCfg.ImageWidth      = 320;
   pLayerCfg.ImageHeight     = 240;
   pLayerCfg.Backcolor.Blue  = 0;
   pLayerCfg.Backcolor.Green = 0;
   pLayerCfg.Backcolor.Red   = 0;
   if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
   {
     Error_Handler();
   }
   pLayerCfg1.WindowX0 = 160;
   pLayerCfg1.WindowX1 = 480;
   pLayerCfg1.WindowY0 = 32;
   pLayerCfg1.WindowY1 = 272;
   pLayerCfg1.PixelFormat     = LTDC_PIXEL_FORMAT_RGB565;
   pLayerCfg1.Alpha           = 255;
   pLayerCfg1.Alpha0          = 0;
   pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
   pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
   pLayerCfg1.FBStartAdress   = 0; /* The frame buffer address should be managed within the user application code */
   pLayerCfg1.ImageWidth      = 320;
   pLayerCfg1.ImageHeight     = 240;
   pLayerCfg1.Backcolor.Blue  = 0;
   pLayerCfg1.Backcolor.Green = 0;
   pLayerCfg1.Backcolor.Red   = 0;
   if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK)
   {
     Error_Handler();
   }
 }

void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc)
{
   GPIO_InitTypeDef GPIO_InitStruct = {0};
   RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
   if(hltdc->Instance==LTDC)
   {
     RCC_OscInitTypeDef        RCC_OscInitStruct={0};
     /** Initializes the peripherals clock */
     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
     PeriphClkInit.LtdcClockSelection = RCC_LTDCCLKSOURCE_PLL3R;
     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
     {
       Error_Handler();
     }
     /* Peripheral clock enable */
     __HAL_RCC_LTDC_CLK_ENABLE();

     __HAL_RCC_GPIOG_CLK_ENABLE();
     __HAL_RCC_GPIOB_CLK_ENABLE();
     __HAL_RCC_GPIOE_CLK_ENABLE();
     __HAL_RCC_GPIOA_CLK_ENABLE();

     /**LTDC GPIO Configuration */
     GPIO_InitStruct.Pin       = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_13;
     GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull      = GPIO_NOPULL;
     GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_LOW;
     GPIO_InitStruct.Alternate = GPIO_AF13_LTDC;
     HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

     GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_12|GPIO_PIN_14
                         |GPIO_PIN_11;
     GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull      = GPIO_NOPULL;
     GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_LOW;
     GPIO_InitStruct.Alternate = GPIO_AF13_LTDC;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

     GPIO_InitStruct.Pin       = GPIO_PIN_11;
     GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull      = GPIO_NOPULL;
     GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_LOW;
     GPIO_InitStruct.Alternate = GPIO_AF11_LTDC;
     HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

     GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_8|GPIO_PIN_15|GPIO_PIN_0
                         |GPIO_PIN_1;
     GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull      = GPIO_NOPULL;
     GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_LOW;
     GPIO_InitStruct.Alternate = GPIO_AF13_LTDC;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

     GPIO_InitStruct.Pin       = GPIO_PIN_9|GPIO_PIN_10;
     GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull      = GPIO_NOPULL;
     GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_LOW;
     GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

     GPIO_InitStruct.Pin       = GPIO_PIN_15|GPIO_PIN_13;
     GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull      = GPIO_NOPULL;
     GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_LOW;
     GPIO_InitStruct.Alternate = GPIO_AF10_LTDC;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

     GPIO_InitStruct.Pin       = GPIO_PIN_6;
     GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull      = GPIO_NOPULL;
     GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_LOW;
     GPIO_InitStruct.Alternate = GPIO_AF12_LTDC;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

     /* LCD clock configuration */

     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
     RCC_OscInitStruct.HSIState       = RCC_HSI_ON;
     RCC_OscInitStruct.HSIDiv         = RCC_HSI_DIV1;
     RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
     RCC_OscInitStruct.PLL1.PLLState       = RCC_PLL_NONE;
     RCC_OscInitStruct.PLL2.PLLState       = RCC_PLL_NONE;
     RCC_OscInitStruct.PLL3.PLLState       = RCC_PLL_ON;
     RCC_OscInitStruct.PLL3.PLLSource      = RCC_PLLSOURCE_HSI;

     RCC_OscInitStruct.PLL3.PLLM = 4;
     RCC_OscInitStruct.PLL3.PLLN = 25;
     RCC_OscInitStruct.PLL3.PLLP = 2;
     RCC_OscInitStruct.PLL3.PLLQ = 20;
     RCC_OscInitStruct.PLL3.PLLR = 16;
     RCC_OscInitStruct.PLL3.PLLS = 2;
     RCC_OscInitStruct.PLL3.PLLT = 2;
     RCC_OscInitStruct.PLL3.PLLFractional = 0;

     if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
     {
       while(1);
     }
     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
     PeriphClkInit.LtdcClockSelection   = RCC_LTDCCLKSOURCE_PLL3R;

     if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
     {
       while(1);
     }
   }
 }
hal_ltdc_handle_t *mx_ltdc_init(void)
{
   hal_ltdc_config_t ltdc_cfg;

   if (HAL_LTDC_Init(&hLTDC, HAL_LTDC) != HAL_OK)
   {
     return NULL;
   }

   if (HAL_RCC_LTDC_SetKernelClkSource(HAL_RCC_LTDC_CLK_SRC_ICLK8) != HAL_OK)
   {
     return NULL;
   }
   HAL_RCC_LTDC_EnableClock();

   /* LTDC Screen configuration */

   ltdc_cfg.hsync_polarity       = HAL_LTDC_HSYNC_POLARITY_LOW;
   ltdc_cfg.vsync_polarity       = HAL_LTDC_VSYNC_POLARITY_LOW;
   ltdc_cfg.data_enable_polarity = HAL_LTDC_DATA_ENABLE_POLARITY_LOW;
   ltdc_cfg.pixel_clock_polarity = HAL_LTDC_PIXEL_CLOCK_POLARITY_LOW;
   ltdc_cfg.hsync           = 0x1;
   ltdc_cfg.vsync           = 0x1;
   ltdc_cfg.h_back_porch    = 0x0000;
   ltdc_cfg.v_back_porch    = 0x0000;
   ltdc_cfg.active_width    = 0x0000;
   ltdc_cfg.active_height   = 0x0000;
   ltdc_cfg.h_front_porch   = 0x0000;
   ltdc_cfg.v_front_porch   = 0x0000;



   if (HAL_LTDC_SetConfig(&hLTDC, &ltdc_cfg) != HAL_OK)
   {
     return NULL;
   }

   /* GPIO Configuration */
   HAL_RCC_GPIOD_EnableClock();
   HAL_RCC_GPIOE_EnableClock();
   HAL_RCC_GPIOB_EnableClock();
   HAL_RCC_GPIOC_EnableClock();

 hal_gpio_config_t  gpio_config;

 /** LTDC GPIO Configuration **/
 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_14;
 HAL_GPIO_Init(HAL_GPIOB, HAL_GPIO_PIN_0 | HAL_GPIO_PIN_10, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_13;
 HAL_GPIO_Init(HAL_GPIOG, HAL_GPIO_PIN_0 | HAL_GPIO_PIN_13, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_13;
 HAL_GPIO_Init(HAL_GPIOB, HAL_GPIO_PIN_14 | HAL_GPIO_PIN_12 | HAL_GPIO_PIN_11, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_12;
 HAL_GPIO_Init(HAL_GPIOC, HAL_GPIO_PIN_12, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_13;
 HAL_GPIO_Init(HAL_GPIOA, HAL_GPIO_PIN_7 | HAL_GPIO_PIN_11 | HAL_GPIO_PIN_8 | HAL_GPIO_PIN_0 | HAL_GPIO_PIN_12, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_13;
 HAL_GPIO_Init(HAL_GPIOE, HAL_GPIO_PIN_8, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_14;
 HAL_GPIO_Init(HAL_GPIOA, HAL_GPIO_PIN_10 | HAL_GPIO_PIN_9, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_12;
 HAL_GPIO_Init(HAL_GPIOA, HAL_GPIO_PIN_6 | HAL_GPIO_PIN_4, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_11;
 HAL_GPIO_Init(HAL_GPIOB, HAL_GPIO_PIN_9 | HAL_GPIO_PIN_6 | HAL_GPIO_PIN_7 | HAL_GPIO_PIN_8, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_10;
 HAL_GPIO_Init(HAL_GPIOB, HAL_GPIO_PIN_1 | HAL_GPIO_PIN_15 | HAL_GPIO_PIN_5, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_10;
 HAL_GPIO_Init(HAL_GPIOC, HAL_GPIO_PIN_0, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_13;
 HAL_GPIO_Init(HAL_GPIOC, HAL_GPIO_PIN_3, &gpio_config);

 gpio_config.mode        = HAL_GPIO_MODE_ALTERNATE;
 gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
 gpio_config.pull        = HAL_GPIO_PULL_NO;
 gpio_config.speed       = HAL_GPIO_SPEED_FREQ_LOW;
 gpio_config.alternate   = HAL_GPIO_AF_14;
 HAL_GPIO_Init(HAL_GPIOG, HAL_GPIO_PIN_3, &gpio_config);

 return &hLTDC;
}

hal_status_t mx_ltdc_config_layer(hal_ltdc_layer_t layer, void *frame_buffer)
{
   hal_ltdc_layer_config_t layer_cfg;
   hal_status_t status;

   switch (layer)
   {
      case HAL_LTDC_LAYER_1:
      layer_cfg.window_x0                  = 0;
      layer_cfg.window_x1                  = 320;
      layer_cfg.window_y0                  = 0;
      layer_cfg.window_y1                  = 240;
      layer_cfg.frame_buffer.pixel_format  = HAL_LTDC_PIXEL_FORMAT_L8;
      layer_cfg.alpha                      = 255;
      layer_cfg.blending_factor1           = HAL_LTDC_BLENDING_FACTOR1_CA;
      layer_cfg.blending_factor2           = HAL_LTDC_BLENDING_FACTOR2_1_MINUS_CA;
      layer_cfg.frame_buffer.address       = (uint32_t)frame_buffer;
      layer_cfg.background_color_argb88888 = 0;
      layer_cfg.frame_buffer.width         = 230;
      layer_cfg.frame_buffer.height        = 240;

      status = HAL_LTDC_SetConfigLayer(&hLTDC, HAL_LTDC_LAYER_1, &layer_cfg);
      if (status != HAL_OK)
      {
         goto end;
      }
      break;
      case HAL_LTDC_LAYER_2:
      layer_cfg.window_x0                  = 160;
      layer_cfg.window_x1                  = 480;
      layer_cfg.window_y0                  = 32;
      layer_cfg.window_y1                  = 272;
      layer_cfg.frame_buffer.pixel_format  = HAL_LTDC_PIXEL_FORMAT_RGB565;
      layer_cfg.alpha                      = 255;
      layer_cfg.blending_factor1           = HAL_LTDC_BLENDING_FACTOR1_CA;
      layer_cfg.blending_factor2           = HAL_LTDC_BLENDING_FACTOR2_1_MINUS_CA;
      layer_cfg.frame_buffer.address       = (uint32_t)frame_buffer;
      layer_cfg.background_color_argb88888 = 0;
      layer_cfg.frame_buffer.width         = 320;
      layer_cfg.frame_buffer.height        = 240;

      status = HAL_LTDC_SetConfigLayer(&hLTDC, HAL_LTDC_LAYER_2, &layer_cfg);

      /* Note: The LTDC frame buffer address and the LTDC start operation should be managed within the user application code */


      if (status != HAL_OK)
      {
         goto end;
      }
      break;

      default:

      status = HAL_INVALID_PARAM;

      break;
   }
   end:
   return status;
 }

Deinitialization sequence

void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc)
{
  if(hltdc->Instance==LTDC)
  {
     __HAL_RCC_LTDC_CLK_DISABLE();

     /* De-initialize all GPIO pins associated with LTDC */
     HAL_GPIO_DeInit(GPIOG, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_13);

     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_12|GPIO_PIN_14
                         |GPIO_PIN_15|GPIO_PIN_11|GPIO_PIN_13);

     HAL_GPIO_DeInit(GPIOE, GPIO_PIN_11);

     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_8
                         |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_6);
   }
 }
void mx_ltdc_deinit(void)
{
  (void)HAL_LTDC_DeInit(&hLTDC);
  HAL_RCC_LTDC_Reset();
  HAL_RCC_LTDC_DisableClock();

  /* De-initialize all GPIO pins associated with LTDC */
  HAL_GPIO_DeInit(HAL_GPIOB, HAL_GPIO_PIN_0 | HAL_GPIO_PIN_1 | HAL_GPIO_PIN_5 | HAL_GPIO_PIN_6 |
  HAL_GPIO_PIN_7 | HAL_GPIO_PIN_8 | HAL_GPIO_PIN_9 | HAL_GPIO_PIN_10 | HAL_GPIO_PIN_11 | HAL_GPIO_PIN_12 |
  HAL_GPIO_PIN_14 | HAL_GPIO_PIN_15);

  HAL_GPIO_DeInit(HAL_GPIOG, HAL_GPIO_PIN_0 | HAL_GPIO_PIN_3 | HAL_GPIO_PIN_13);

  HAL_GPIO_DeInit(HAL_GPIOC, HAL_GPIO_PIN_0 | HAL_GPIO_PIN_3 | HAL_GPIO_PIN_12);

  HAL_GPIO_DeInit(HAL_GPIOA, HAL_GPIO_PIN_0 | HAL_GPIO_PIN_4 | HAL_GPIO_PIN_6 | HAL_GPIO_PIN_7 |
  HAL_GPIO_PIN_8 | HAL_GPIO_PIN_9 | HAL_GPIO_PIN_10 | HAL_GPIO_PIN_11 | HAL_GPIO_PIN_12);

  HAL_GPIO_DeInit(HAL_GPIOE, HAL_GPIO_PIN_8);

}

IRQ handle function

void LTDC_ER_IRQHandler(void)
{
   HAL_LTDC_IRQHandler(&hltdc);
}
void LTDC_ERR_S_IRQHandler(void)
{
  HAL_LTDC_ERR_IRQHandler(&hLTDC);
}